/* $Id: util.js,v 1.42 2005/06/03 02:48:09 k-narumi Exp $ */
//===========================================================================
// ???JavaScript
//
// for Translation
// function checkIEVersion
//   000 BROWSER_ERROR(variable)
//   001 VERSION_ERROR(variable)
// function checkSvgViewer
//   100 SVG_ERROR(variable)
// function openPreparationItems
//   200 PREPARATION_ITEMS_ERROR
// function openTips
//   300 TIPS_ERROR
// function openPartsLocation
//   400 PARTS_LOCATION_ERROR
// function getFormatDate
//   500 MONTH
// function checkWordLength
//   046 INPUTWORD_ERROR
// function convSeepage
//   600 REFERENCE_PAGE_CHARACTER
//   601 REPLACE_REFERENCE_PAGE_CHARACTER
//===========================================================================

//===========================================================================
// URL????????????????????????????1?????
//
// arg0      ??????
// arg[1..n] ????????URL???
//===========================================================================
function findParameterValue() {
	if (arguments.length>0 && arguments.length<2) {
		return getParameterValue(arguments[0]);
	} else {
		var key = arguments[0];
		var paramList = null;
		for(var i = 1; i<arguments.length; i++){
			paramList = arguments[i];
			var ret = getParameterValue(key , paramList);
			if( ret != null ) return ret;
		}
	} 
	return null;
}

//===========================================================================
// ??????????????????
//
// arg0 ??????
// arg1 ????????URL???
//===========================================================================
function getParameterValue() {
	var key=null;
	var paramList = null;
	if (arguments.length <= 0) {
		return null;
	} else if (arguments.length == 1) {
		paramList = getParameterList();
		key = arguments[0];
	} else {
		if (arguments[1] == null) return null;
		paramList = getParameterList(arguments[1]);
		key = arguments[0];
	}
	if (paramList==null) return null;
	for(var i=0; i<paramList.length; i++) {
		var param = paramList[i].split("=");
		if(param[0].match(key)) {
			return param[1];
		}
	}
	return null;
}

//===========================================================================
// URL?????????????????????????
// 
// arg0 ????????URL???
//===========================================================================
function getParameterValueList() {
	var str = (arguments.length <= 0) ? location.search : arguments[0];
	var paramList = getParameterList(str);
	var list = new Array();
	for(var i=0; i<paramList.length; i++) {
		var param = paramList[i].split("=");
		list.push(param[1]);
	}
	return list;
}

//===========================================================================
// URL?????? "param=val"????????????????????
//
// arg0 ????????URL???
//===========================================================================
function getParameterList() {
	var str;
	if (arguments.length <= 0) {
		str = location.search;
	} else {
		str = arguments[0].toString();
		var n = str.indexOf("?");
		str = str.substring(n,str.length);
	}
	var loc = str.toString().substring(1, str.length);
	var paramList = loc.split("&");
	return paramList;
}

//===========================================================================
// VIN, ????, ????????????????????????????
//
// term   ???????
// vin    VIN No???
// filter filter???
//===========================================================================
var DQ = "?";
var DA = "&";
function getDefaultParameter(term, vin, filter) {
	var contains = false;
	var param = "";
	if (term!=null) {
		param += "" + ((contains) ? DA : DQ) + "term=" + term;
		contains = true;
	}
	if (filter!=null) {
		param += "" + ((contains) ? DA : DQ) + "filter=" + filter;
		contains = true;
	}
	if (vin!=null) {
		param += "" + ((contains) ? DA : DQ) + "vin=" + vin;
		contains = true;
	}
	return param;
}

//===========================================================================
// ???????????
//
// term   ???????
// vin    VIN No???
// filter filter???
//===========================================================================
function openTopPage(term, vin, filter) {
	var param = getDefaultParameter(term, vin, filter);
	parent.location.href = "../index.html" + param;
}

//===========================================================================
// ???????????
//
// term   ???????
// vin    VIN No???
// filter filter???
// idx    ????????????????
//        Index -> "toc", Service Specification -> "srv_spc"
//        general -> "mnt"
//===========================================================================
function openBackPage(term, vin, filter, idx) {
	var backpage = "";
	if (idx!=null) backpage = "../"+idx+"/frame.html";
	var param = getDefaultParameter(term, vin, filter);
	var bp = findParameterValue("bp");
	var bi = findParameterValue("bi");
	var paraId = findParameterValue("parag");
	var illustId = findParameterValue("illust");
	var tocTypes = new RegExp("toc|srv_spc|mnt", "g");
	var addParam = ((idx=="toc"||idx=="srv_spc"||idx=="mnt") ? "&idx=" + idx : "")
							 + ((bi!=null) ? "&idx=" + bi : "")
							 + ((bp!=null) ? "&parag=" + bp : "&parag=" + paraId)
							 + ((illustId!=null) ? "&illust=" +illustId : "");
	var tmp = backpage + param + addParam;
	// ?????????????'&'?????
	if (tmp.indexOf("?")<0) {
		var strs = tmp.split("&");
		tmp = strs[0];
		for (var i=1; i<strs.length; i++) {
			tmp += (i==1) ? "?"+strs[i] : "&"+strs[i];
		}
	}
	parent.location.href = tmp;
}

//===========================================================================
// ???????????????????
//
// args[] ?????????????
//===========================================================================
var dialogArgs = new Array();
function setDialogArgs() {
	dialogArgs=arguments;
}

//===========================================================================
// ??????????????????????
//===========================================================================
function clearDialogArgs() {
	dialogArgs=new Array();
}

//===========================================================================
// ?????????
//
// objXml        ??????XML
// objXsl        ???XSL
// windowTitle   ?????????????
// selectable    ???????(Installation/Remove??true??)
//===========================================================================
function openPrintPreview(objXml, objXsl, xslArgs, windowTitle, dialogTitle, selectable) {
	if (objXml==null || objXsl==null) {
		return;
	}
	setDialogArgs(objXml, objXsl, xslArgs, windowTitle, dialogTitle, selectable);
	openDialog("../etc/prt_frame.html", "prt");
	clearDialogArgs();
}

//===========================================================================
// ????????????
// 
// pprXmlList  ???XML????
// dialogTitle ??
//===========================================================================
var PREPARATION_ITEMS_ERROR = "ไม่มีรายการการเตรียมการที่สามารถเรียกใช้งานได้"; //200
function openPreparationItems(pprXmlList, dialogTitle) {
	if (pprXmlList==null) {
		alert(PREPARATION_ITEMS_ERROR);
		return;
	}
	setDialogArgs(pprXmlList, dialogTitle);
	openDialog("../etc/ppr_frame.html", "ppr");
	clearDialogArgs();
}

//===========================================================================
// Tips(??)???????
// 
// tipsXml     Tips??XML
// dialogTitle ??
//===========================================================================
var TIPS_ERROR = "ไม่มีข้อแนะนำทางเทคนิคที่สามารถเรียกใช้งานได้"; // 300
function openTips(tipsXml, dialogTitle) {
	if (tipsXml==null) {
		alert(TIPS_ERROR);
		return;
	}
	var tips = tipsXml.selectNodes("//tips");
	if (tips.length==1) {
		var url = tips.item(0).getAttribute("url");
		openNewWindow(url, "");
		return;
	}
	setDialogArgs(tipsXml, dialogTitle);
	openDialog("../etc/tps_frame.html", "tps");
	clearDialogArgs();
}

//===========================================================================
// ????????????
// 
// parts       ??ID
// illust      ?????
// dialogTitle ??
//===========================================================================
var PARTS_LOCATION_ERROR = "ไม่มีภาพที่สามารถเรียกใช้งานได้"; //400
function openPartsLocation(parts, illust, dialogTitle) {
	if (parts==null || illust==null) {
		alert(PARTS_LOCATION_ERROR);
		return;
	}
	setDialogArgs(parts, illust, dialogTitle);
	openDialog("../etc/pts_frame.html", "pts");
	clearDialogArgs();
}

//===========================================================================
// ????????
//
// arg0 URL
// arg1 type
//===========================================================================
function openDialog() {
	// dialog type definition
	var normal = "dialogWidth=700px; dialogHeight=600px; status=yes; resizable=yes; help=no;";
	var margin = "dialogWidth=700px; dialogHeight=600px; status=yes; resizable=yes; help=no; dialogLeft="+g_margin+";";
	var select = "dialogWidth=700px; dialogHeight=300px; status=yes; resizable=yes; help=no;";
	var note   = "dialogWidth=950px; dialogHeight=650px; status=yes; resizable=yes; help=no;";

	if(arguments.length!=2) return;
	var url  = arguments[0];
	var type = arguments[1];
	switch(type) {
		case "pts": // Parts Location
		case "ppr": // Preparation
		case "tps": // Tips
		case "prt": // Print Preview
			showModalDialog(url, dialogArgs, normal);
			break;
		case "det": // DTC Detail
			var ret=showModalDialog(url, dialogArgs, normal);
			return ret;
		case "sep": // See Page
		case "nts": // Diag Notes
			showModalDialog(url, dialogArgs, margin);
			break;
		case "tls": // Title Selection
		case "dtc": // Title Selection
			var ret=showModalDialog(url, dialogArgs, select);
			return ret;
		case "pdt": // Production Date
			var ret=showModalDialog(url, dialogArgs, select);
			return ret;
		case "nte": // Note Dialog
			var ret=showModalDialog(url, dialogArgs, note);
      return ret;
		default:
	}
	return;
}

//===========================================================================
// ??????????
// ??URL???????????????????term, vin, filter?null?
// ???????
//
// url    URL
// name   ?????????
// term   ????
// vin    VIN No.
// filter ????
//===========================================================================
function openNewWindow(url, name, term, vin, filter) {
	if (arguments==null) return;
	name = (name!=null) ? name : "";
	var tmpURL = url.split("?");
	var defParam = getDefaultParameter(term, vin, filter)
	if (defParam.length>0) {
		url = tmpURL[0] + defParam + "&" + tmpURL[1];
	} else {
		url = tmpURL[0] + "?" + tmpURL[1];
	}
	if (tmpURL.length>2) {
		for (var i=2; i<tmpURL.length; i++) {
			url += "&" + tmpURL[i];
		}
	}
	//url += getDefaultParameter(term, vin, filter);

	win = window.open("about:blank", name, "");
	try {
		win.resizeTo(970, 740);
		win.moveTo(30, 12);
		win.focus();
		win.location.href=url;
	} catch (e) {}
	return win;
}

//===========================================================================
// ???????????????????
//
// arg0 ??Id
// arg1 ??????  ?????????'P'??????POPUP????
// arg2 ????Id
// arg3 ??ID        ????????????
//===========================================================================
function selectTypedLocation() {
	if (arguments==null || arguments.length<2) return;
	var paraId = arguments[0];
	var bp = arguments[2];
	var s1 = arguments[3];
	var term = findParameterValue("term", location.search, parent.location.search);
	var vin = findParameterValue("vin", location.search, parent.location.search);
	var filter = findParameterValue("filter", location.search, parent.location.search);
	var idx = findParameterValue("idx", location.search, parent.location.search);
	var defParam = ((bp!=null) ? "&bp="+bp : "")
							 + ((term!=null) ? "&term="+term : "")
							 + ((vin!=null) ? "&vin="+vin : "")
							 + ((filter!=null) ? "&filter="+filter : "")
							 + ((idx!=null) ? "&idx="+idx : "")
							 + ((s1!=null) ? "&s1="+s1 : "");
	var ret = null;
	switch(arguments[1]) {
		case "A":
			parent.location.href="../rmv_ctt/frame.html?parag="+paraId+defParam;
			break;
		case "PA":
			ret=openNewWindow("../rmv_ctt/frame.html?parag="+paraId+defParam, "");
			break;
		case "K":
			parent.location.href="../rmv_toc/frame.html?parag="+paraId+defParam;
			break;
		case "PK":
			ret=openNewWindow("../rmv_toc/frame.html?parag="+paraId+defParam, "");
			break;
		case "G":
			parent.location.href="../isp_ctt/frame.html?parag="+paraId+defParam;
			break;
		case "PG":
			ret=openNewWindow("../isp_ctt/frame.html?parag="+paraId+defParam, "");
			break;
		case "R":
			parent.location.href="../isp_toc/frame.html?parag="+paraId+defParam;
			break;
		case "PR":
			ret=openNewWindow("../isp_toc/frame.html?parag="+paraId+defParam, "");
			break;
		case "C":
		case "J":
			parent.location.href="../trb_dag/frame.html?parag="+paraId+defParam;
			break;
		case "PC":
		case "PJ":
			ret=openNewWindow("../trb_dag/frame.html?parag="+paraId+defParam, "");
			break;
		default:
			if (arguments[1].length>1 && arguments[1].charAt(0)=='P')
				ret=openNewWindow("../toc/gen_frame.html?parag="+paraId+defParam, "");
			else
				parent.location.href="../toc/gen_frame.html?parag="+paraId+defParam;
			break;
	}
	return ret;
}

//===========================================================================
// ?????????????
//
// arg0 ????????
//===========================================================================
function framePrint(frameName) {
	var disp = frameName.disp;
	var chgSeepage = false;
	if (disp!= null) {
		// ?????????
		var orgHtml = disp.innerHTML;
		// ????????
		chgSeepage = convSeepage(disp);
	}
	frameName.focus();
	frameName.print();
	// ?????????
	if (disp!= null && chgSeepage) {
		disp.innerHTML = orgHtml;
	}
}

//===========================================================================
// HTTP???????????
// 
// ??? HTTP     true
//        ???? false
//===========================================================================
function isHttpProtocol() {
	return (location.protocol.indexOf("http")==0) ? true : false;
}

//===========================================================================
// ??????
//
// ??? IE 5.5 ?? true;
//        ????    false;
//===========================================================================
var BROWSER_ERROR = "ระบบนี้ไม่สามารถใช้งานได้กับระบบอื่นนอกจาก Internet Explorer"
                  + "\n"
                  + " กรุณาใช้ Internet Explorer 5.5 หรือสูงกว่า" // 000
var VERSION_ERROR = "ระบบนี้ไม่สามารถใช้ได้กับ Internet Explorer 5 หรือต่ำกว่า"
                  + "\n"
                  + " กรุณาใช้ Internet Explorer 5.5 หรือสูงกว่า" // 001
function checkIEVersion() {
	// ???????????????????????
	var agt=navigator.userAgent.toLowerCase();

	// ?????????
	var ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
	if( !ie ) {
		alert(BROWSER_ERROR);
		return false;
	}
	var m  = agt.indexOf("msie")+4;
	var n  = agt.indexOf(";",m);
	var   iestring  = agt.substring(m,n);
	var IEVersion = parseFloat( iestring ) ;
	if( IEVersion < 5.5 ) {
		alert(VERSION_ERROR);
		return false;
	}
	return true;
}

//===========================================================================
// ActiveX??????????
//
// ??? ???????? true;
//        ????         false;
//===========================================================================
function checkActiveX(name,msg,verbose) {
	//MSXML???
	try {
		var objXml = new ActiveXObject(name);
		if( objXml == null){
			if (arguments.length<3 || verbose) alert(msg);
			return false;
		}
	} catch(e) {
		if (arguments.length<3 || verbose) alert(msg);
		return false;
	}	
	return true;
}

//===========================================================================
// SVG Viewer??????????
//
// ??? ???????? true;
//        ????         false;
//===========================================================================
var SVG_ERROR = "กรุณาติดตั้ง 'SVG Viewer Plugln'"; // 100
function checkSvgViewer() {
	try {
		var objSvg = document.all.tags('embed');
		if( objSvg[0].getSVGDocument() == null){
			alert(SVG_ERROR);
			return false;
		}
	} catch(e) {
		alert(SVG_ERROR);
		return false;
	}	
	return true;
}

//===========================================================================
// ?????(MMM, yyyy)?yyyyMM?????????
//
// yyyyMM yyyyMM????????
//===========================================================================
// 500 
var MONTH = new Array("ม.ค. ", "ก.พ. ", "มี.ค.  ", "เม.ย. ", "พ.ค. ", "มิ.ย. ", 
                      "ก.ค. ", "ส.ค. ", "ก.ย. ", "ต.ค. ", "พ.ย. ", "ธ.ค. ");
function getFormatDate(yyyyMM) {
	var yyyy = yyyyMM.substring(0, 4);
	var yyyy = eval(yyyy) + 543; // year in thai
	var MM = yyyyMM.substring(4, 6);
	var ret = MONTH[eval(MM)-1] + (yyyy.toString());
	return ret;
}

//===========================================================================
// SeePage?????/xml.js_seePage()?????? 
//
// args: subpara_id&s-1_Id?HashTable
//===========================================================================
function openSeePage(subs1Id){
	setDialogArgs(subs1Id);
	openDialog("../etc/seepage_frame.html", "sep");
	clearDialogArgs();
}

//===========================================================================
// ??????????
//
// ??? 1000????     true;
//        ????         false;
//===========================================================================
var INPUTWORD_ERROR = "คำที่ใส่ยาวเกินไป";// 046
function checkWordLength(word) {
	if(word.length >= 1000){
		alert(INPUTWORD_ERROR);
		return false;
	}
	return true;
}

//===========================================================================
// ????????????<????<??(????)?????
// initXml?????xml.js????????????????????????
//
// arg0 ??html
//===========================================================================
var REFERENCE_PAGE_CHARACTER = "คลิกที่นี่";// 600
var REPLACE_REFERENCE_PAGE_CHARACTER = "Refer to";// 601
function convSeepage(disp) {
	var chgSeepage = false;
	var refList = disp.getElementsByTagName("a");
	var tocXml = null;
	if (refList.length > 0) {
		tocXml = initXml("toc_rpr.xml");
	}
	for (var i=0; i<refList.length; i++) {
		var ref = refList.item(i);
		// Click here???????
		if (ref.innerText.indexOf(REFERENCE_PAGE_CHARACTER) != -1) {
			chgSeepage = true;
			var onclickStr = ref.getAttribute("onclick").toString();
			var paraId = onclickStr.substring(onclickStr.indexOf("'") + 1, onclickStr.lastIndexOf("'"));
			// ??ID????(??????????)
			paraId = paraId.substring(0, 15);

			// ?????
			ref.setAttribute("onclick", "");
			ref.removeAttribute("href");

			// ??????????????????????
			var secNode = tocXml.selectSingleNode("//section[ttl[para[@id='"+paraId+"']]]");
			var secName = "";
			var ttlName = "";
			var paraName = "";
			var term = "";
			if (secNode != null) {
				secName = secNode.getElementsByTagName("name").item(0).nodeTypedValue;
				var ttlNode = secNode.selectSingleNode("//ttl[para[@id='"+paraId+"']]");
				ttlName = ttlNode.getElementsByTagName("name").item(0).nodeTypedValue;
				var paraNode = ttlNode.selectSingleNode("//para[@id='"+paraId+"']");
				var nameList = paraNode.getElementsByTagName("name");
				for (var j=0; j<nameList.length; j++) {
					paraName += nameList.item(j).nodeTypedValue;
					if (j != nameList.length - 1) {
						paraName += " / ";
					}
				}
				// ??????
				var termFrom = paraNode.getAttribute("from");
				var termTo = paraNode.getAttribute("to");
				if (termFrom != null || termTo != null) {
					term += "(";
					if (termFrom != null) {
						term += termFrom;
					}
					term += " - ";
					if (termTo != null) {
						term += termTo;
					}
					term += ")";
				}
			}
			// Click here???
			var delString = new RegExp(REFERENCE_PAGE_CHARACTER, "ig");
			var replaceString = "<span>" + REPLACE_REFERENCE_PAGE_CHARACTER + " </span>";
			if (secNode != null) {
				replaceString += "<span class='printseepage'>" + secName + " > " + ttlName + " > " + paraName + term + "</span>";
			}
			ref.innerHTML = ref.innerHTML.replace(delString, replaceString);
		}
	}
	return chgSeepage;
}
